package com.expert.miniapp.dao;

import com.expert.miniapp.dto.RecommendationItemDetailDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * RecommendationItemMapper - 推荐明细Mapper接口
 *
 * @author System
 * @since 2025-10-31
 */
@Mapper
public interface RecommendationItemMapper {

    /**
     * 批量插入推荐明细
     *
     * @param items 推荐明细列表
     * @return 影响行数
     */
    int insertBatch(@Param("items") List<RecommendationItem> items);

    /**
     * 根据推荐ID查询所有推荐明细
     *
     * @param recommendationId 推荐ID
     * @return 推荐明细列表（按rank_order排序）
     */
    List<RecommendationItem> findByRecommendationId(@Param("recommendationId") String recommendationId);

    /**
     * 根据推荐ID删除所有推荐明细
     *
     * @param recommendationId 推荐ID
     * @return 删除的记录数
     */
    int deleteByRecommendationId(@Param("recommendationId") String recommendationId);

    /**
     * 根据推荐ID统计明细数量
     *
     * @param recommendationId 推荐ID
     * @return 明细数量
     */
    int countByRecommendationId(@Param("recommendationId") String recommendationId);

    /**
     * 根据推荐项ID查询推荐项
     *
     * @param itemId 推荐项ID
     * @return 推荐项对象
     */
    RecommendationItem findByItemId(@Param("itemId") String itemId);

    /**
     * 更新推荐项的分析报告
     *
     * @param itemId 推荐项ID
     * @param analysisReport 分析报告内容
     * @return 影响行数
     */
    int updateAnalysisReport(@Param("itemId") String itemId, @Param("analysisReport") String analysisReport);

    /**
     * 更新推荐项的is_added_to_case标记
     *
     * @param itemId 推荐项ID
     * @param isAddedToCase 是否已加入案例库（true=1, false=0）
     * @return 影响行数
     */
    int updateIsAddedToCase(@Param("itemId") String itemId, @Param("isAddedToCase") Boolean isAddedToCase);

    /**
     * 根据推荐项ID查询详细信息（包含用户和需求信息）
     *
     * @param itemId 推荐项ID
     * @return 推荐项详细信息DTO
     */
    RecommendationItemDetailDTO findDetailByItemId(@Param("itemId") String itemId);
}
